package com.tcoiss.kettle.server.service;//package com.tcoiss.kettle.server.service;
//
//import org.apache.shiro.crypto.hash.Sha256Hash;
//import com.tcoiss.kettle.common.exceptions.MyMessageException;
//import com.tcoiss.kettle.common.povo.PageHelper;
//import com.tcoiss.kettle.common.povo.PageOut;
//import com.tcoiss.kettle.common.utils.BeanUtil;
//import com.tcoiss.kettle.common.utils.StringUtil;
//import com.tcoiss.kettle.common.request.UserReq;
//import com.tcoiss.kettle.common.response.UserRes;
//import com.tcoiss.kettle.server.constant.Constant;
//import com.tcoiss.kettle.server.entity.User;
//import com.tcoiss.kettle.server.repository.UserRepository;
//import org.springframework.data.domain.*;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import java.utils.List;
//import java.utils.Optional;
//import java.utils.stream.Collectors;
//
///**
// * 用户管理业务逻辑层
// *
// * @author lyf
// */
//@Service
//public class SysUserService {
//    private final UserRepository userRepository;
//
//    public SysUserService(UserRepository userRepository) {
//        this.userRepository = userRepository;
//    }
//
//    @Transactional(rollbackFor = Exception.class)
//    public void add(UserReq req) {
//        User user = BeanUtil.copyProperties(req, User.class);
//        // 密码加密
//		user.setPassword(new Sha256Hash(user.getPassword(),Constant.salt,Constant.hashIterations).toString());
//        userRepository.save(user);
//    }
//
//    @Transactional(rollbackFor = Exception.class)
//    public void delete(Integer id) {
//		Optional<User> optional = userRepository.findById(id);
//		if (!optional.isPresent()) {
//			throw new MyMessageException("删除对象不存在");
//		}
//		User user = optional.get();
//		if ("admin".equals(user.getAccount())) {
//			throw new MyMessageException("无法删除管理员账户");
//		}
//		userRepository.delete(user);
//    }
//
//    @Transactional(rollbackFor = Exception.class)
//    public void deleteBatch(List<Integer> ids) {
//        List<User> users = userRepository.findAllById(ids);
//		List<User> collect = users.stream().filter(user -> !"admin".equals(user.getAccount())).collect(Collectors.toList());
//		userRepository.deleteInBatch(collect);
//    }
//
//    @Transactional(rollbackFor = Exception.class)
//    public void update(UserReq req) {
//        Optional<User> optional = userRepository.findById(req.getId());
//        if (optional.isPresent()) {
//			// 密码加密
//			if (!StringUtil.isEmpty(req.getPassword())) {
//				req.setPassword(new Sha256Hash(req.getPassword(),Constant.salt,Constant.hashIterations).toString());
//			}
//			User user = optional.get();
//			BeanUtil.copyProperties(req, user);
//            userRepository.save(user);
//        }
//    }
//
//    public PageOut<UserRes> findUserListByPage(UserReq query, PageHelper page) {
//        // 排序
//        Sort sort = page.getSorts().isEmpty() ? Sort.by(Sort.Direction.DESC, "addTime") : page.getSorts();
//        // 查询
//		Page<User> pageList;
//		if (query != null) {
//			User user = BeanUtil.copyProperties(query, User.class);
//			ExampleMatcher matcher = ExampleMatcher.matchingAll().withIgnoreCase();
//			Example<User> example = Example.of(user, matcher);
//			pageList = userRepository.findAll(example, PageRequest.of(page.getNumber(), page.getSize(), sort));
//		} else {
//			pageList = userRepository.findAll(PageRequest.of(page.getNumber(), page.getSize(), sort));
//		}
//        // 封装数据
//        List<UserRes> collect = pageList.get().map(t -> BeanUtil.copyProperties(t, UserRes.class)).collect(Collectors.toList());
//        return new PageOut<>(collect, pageList.getNumber(), pageList.getSize(), pageList.getTotalElements());
//    }
//
//    public UserRes getUserDetail(Integer id) {
//        Optional<User> optional = userRepository.findById(id);
//        return optional.map(user -> BeanUtil.copyProperties(user, UserRes.class)).orElse(null);
//    }
//
//    public User getUserByAccount(String account) {
//    	return userRepository.findByAccount(account);
//	}
//
//    public static void main(String[] args) {
//        System.out.println(new Sha256Hash("admin","kettle-salt",10).toString());
//    }
//}
